home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / ms_dos / tool / dprint / dpothers.c < prev    next >
Text File  |  1995-01-04  |  4KB  |  178 lines

  1. /*
  2.  
  3. 8086|Printman/POSTCARD 「その他」メニューモジュール
  4. Copyright (c) 1993,94 Delmonta
  5.  
  6. */
  7.  
  8. #include<dos.h>
  9. #include<string.h>
  10. #include<jstring.h>
  11. #include<stdlib.h>
  12. #include<errno.h>
  13. #include"dprint.h"
  14.  
  15. #define    DFLVER_MAJOR    1
  16. #define    DFLVER_MINOR    0
  17.  
  18. static    char    Dfl_header[] =  "8086|Printman/POSTCARD デフォルト設定ファイル"
  19.                 " Version ";
  20. static    char    Dflver_str[] =  "1.00\x1a";
  21.  
  22. char    Dflfilename[64];
  23.  
  24. /*---------------------------------------------------------------------------*/
  25.  
  26. static    bool    dp_writedefault(void)
  27. {
  28.     FILE    *fp = fopen(Dflfilename,"wb");
  29.  
  30.     if    (fp==NULL)
  31.     {
  32.         dp_errmes("定義ファイルがオープンできません");
  33.         return FALSE;
  34.     }
  35.                     /* -1するのは文字列末の'\0'の分 */
  36.     if    (fwrite(Dfl_header,sizeof(char),sizeof(Dfl_header)-1,fp)==0)
  37.         goto wdfl_errexit;
  38.     if    (fwrite(Dflver_str,sizeof(char),sizeof(Dflver_str)-1,fp)==0)
  39.         goto wdfl_errexit;
  40.  
  41.     if    (fwrite(&Dflfile,sizeof(struct DFLFILE),1,fp)==0)
  42.         goto wdfl_errexit;
  43.  
  44.     fclose(fp);
  45.     return TRUE;
  46.  
  47. wdfl_errexit:
  48.     dp_errmes("書き込みエラーです.");
  49.     printf("errno=%d\n",errno);
  50.     fclose(fp);
  51.     return FALSE;
  52. }
  53.  
  54. static    bool    dp_readdefault(void)
  55. {
  56.     FILE        *fp = fopen(Dflfilename,"rb");
  57.     char        buf[sizeof(Dfl_header)];
  58.     int        c;        /* getc()の仕様に合わせてint型 */
  59.     unsigned    i;
  60.  
  61.     if    (fp==NULL)
  62.         return FALSE;
  63.  
  64.     buf[sizeof(Dfl_header)-1] = '\0';
  65.  
  66.     if    (  fread(buf,sizeof(char),sizeof(Dfl_header)-1,fp) < sizeof(Dfl_header)-1
  67.         || strcmp(Dfl_header,buf) )
  68.     {
  69.         dp_errmes("定義ファイルヘッダが不正です");
  70.         goto rdfl_exit;
  71.     }
  72.  
  73.     i = 0;
  74.  
  75.     while    ((c=getc(fp))!=EOF)
  76.     {
  77.         if    (c==0x1a)
  78.         {
  79.             buf[i] = '\0';
  80.             break;
  81.         }
  82.         else
  83.             buf[i++] = (char)c;
  84.     }
  85.  
  86.     if    (c==EOF || (c=dpatoi(buf))==DPATOI_ERROR)
  87.     {
  88.         dp_errmes("定義ファイルのバージョンが不正です");
  89.         goto rdfl_exit;
  90.     }
  91. /*
  92.  *    else if    (c<DFLVER_MAJOR*100)
  93.  *    {
  94.  *        dp_errmes("\a定義ファイルのバージョンが古すぎます. SETDFLユーティリティで"
  95.  *                    "新しいものに変換してください.");
  96.  *        goto rdfl_exit;
  97.  *    }
  98.  */
  99.     else if    (c>=(DFLVER_MAJOR+1)*100)
  100.     {
  101.         dp_errmes("\a定義ファイルのバージョンが新しすぎます. 新版ソフトを入手してください.");
  102.         goto rdfl_exit;
  103.     }
  104.  
  105.     fread(&Dflfile,sizeof(struct DFLFILE),1,fp);
  106.  
  107.     fclose(fp);
  108.     return TRUE;
  109.  
  110. rdfl_exit:
  111.     fclose(fp);
  112.     return FALSE;
  113. }
  114. /*---------------------------------------------------------------------------*/
  115. void    dflfile_init(char *argv0)
  116. {
  117.     char    *p;
  118.  
  119.     strcpy(Dflfilename,argv0);
  120.     p = jstrrchr(Dflfilename,'\\');
  121.     strcpy(p+1,"DPRINT.DFL");
  122.     dp_readdefault();
  123. }
  124. /*---------------------------------------------------------------------------*/
  125. static    void    putstatus(void)
  126. {
  127. static    char    ERASELINE[] = "\033[%u;1f\033[2K";
  128.     int    i;
  129.  
  130.     for    (i=13 ; i<=22 ; i++)
  131.         printf(ERASELINE,i);
  132.  
  133.     printf( "\033[%d;1f\033[37m"
  134.         "空きメモリ      : \033[33m%7ld \033[37mバイト\n"
  135.         "MS-DOSバージョン   : \033[33m%u.%02u\033[37m\n",
  136.             SYSLINE_START,farcoreleft(),_osmajor,_osminor);
  137.  
  138.     if    (dp_getch()==EXTKEY_H)
  139.         dp_getch();
  140.  
  141.     for    (i=13 ; i<=22 ; i++)
  142.         printf(ERASELINE,i);
  143. }
  144.  
  145. void    dp_othersmenu(void)
  146. {
  147. static    struct    MENUDAT    menu[] =
  148.     {
  149.         {'D',"更新","定義ファイルを更新します"},
  150.         {'S',"現在の状態","現在の各種状態を表示します"},
  151.         {'L',"デフォルトに戻す","定義ファイルを読み込み、設定をデフォルトに戻します"},
  152.     };
  153.  
  154.     int    a;
  155.  
  156. othersmenu_rep:
  157.  
  158.     a = dp_menuselect("F8:その他",3,menu);
  159.  
  160.     switch    (a)
  161.     {
  162.     case -1:    return;
  163.     case  0:
  164.         if    (dp_writedefault())
  165.             dp_errmes("定義ファイルを更新しました.");
  166.         break;
  167.     case  1:
  168.         putstatus();
  169.         break;
  170.     case  2:
  171.         if    (dp_readdefault())
  172.             dp_errmes("定義ファイルを読み込みました.");
  173.         break;
  174.     }
  175.  
  176.     goto    othersmenu_rep;
  177. }
  178.